跪求[十万火急]:一道有关C++楼层分配问题的解答

来源:百度知道 编辑:UC知道 时间:2024/05/22 16:58:08
这道题我一点思路都没有,请大家帮忙。万分感谢!!!

一、设计方法和基本原理
1. 课题功能描述
设计一个能够解决楼层分配问题的程序,要求实现的功能包括:找所有满足特定条件的楼层分配方案,然后输出(参见下图)。

1: 1楼:B 2楼:C 3楼:D 4楼:E 5楼:A
2: 1楼:B 2楼:D 3楼:C 4楼:E 5楼:A
3: 1楼:C 2楼:D 3楼:A 4楼:E 5楼:B
4: 1楼:C 2楼:D 3楼:B 4楼:E 5楼:A
5: 1楼:C 2楼:D 3楼:E 4楼:A 5楼:B
6: 1楼:C 2楼:D 3楼:E 4楼:B 5楼:A
7: 1楼:D 2楼:C 3楼:A 4楼:E 5楼:B
8: 1楼:D 2楼:C 3楼:B 4楼:E 5楼:A
9: 1楼:D 2楼:C 3楼:E 4楼:A 5楼:B
10:1楼:D 2楼:C 3楼:E 4楼:B 5楼:A

2. 问题详细描述
特定条件:现有五层的公寓分配给A、B、C、D、E五个人住。其中A不住1楼,E不住5楼,C和D住上下楼(可以C比D住的高,也可以D比C住的高),E比C住的高。要求编写多个函数分别实现上述功能,而后在main函数中进行调用。
3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。
可以利用穷举法,把所有楼层分配的可能都列出来,对每一种楼层分配进行判断,如果满足上述条件则输出。

二、主要技术问题的描述
可以声明一个数组用来代表楼层,例如数组的第一个元素代表1楼,第二个元素代表2楼,依次类推。然后用一个五层的循环来生成所有可能的楼层分配。

三、创新要求
在基本要求达到后,进行创新设计:
1.使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;
2.用全排列算法来生成所有可能的楼层分配。

#include <iostream>
#include <cmath>
using namespace std;
int pos[5];//pos数组0..4分别代表a..e五个人,每个元素的值代表每个人住的楼层。

void print (int pos[5])//转换输出函数
{
char temp[5];//temp数组0..4分别代表1..5五楼
for (int i=0;i<=4;i++)
{
temp[(pos[i]-1)]= char('A'+i);
}

for (int j=1;j<=5;j++)
cout<<j<<"楼"<<temp[j-1]<< "住 ";
cout<<"\n";
}

bool filter (int pos[5])//对穷举的到的数组进行过滤,但凡数组中有两个以上元素相等的都返回false
{
int temp;
for (int i=0;i<=4;i++)//比较数组元素,有两个相等的都返回false,不符合题目条件
{temp=pos[i];
for (int j=i+1;j<=4;j++)
if(temp==pos[j])
return false;
}

return true;
}
bool judge (int pos[5])
{//根据其中A不住1楼,B不住5楼...等条件判断,pos[0]是A住的楼层,pos[0]是B住的楼层...不符合的返回返回false

if(( pos[0]==1)||(pos[1]==5)||(abs(pos[2]-pos[3])!=1))
return false;
if(pos[4]<pos[2])
retu